package baidumap

import (
	"encoding/json"
	"fmt"
	"github.com/astaxie/beego/httplib"
	"github.com/astaxie/beego/logs"
)

// lat<纬度>,lng<经度>
type ReverseGeoCodingParam struct {
	Lat       float64
	Lng       float64
	Ak        string
	CoordType string // 坐标的类型，目前支持的坐标类型包括：bd09ll（百度经纬度坐标）、bd09mc（百度米制坐标）、gcj02ll（国测局经纬度坐标，仅限中国）、wgs84ll（ GPS经纬度）
}

// http://lbsyun.baidu.com/index.php?title=webapi/guide/webservice-geocoding-abroad
type ReverseGeoCodingResult struct {
	Status int8 `json:"status"`
	Result struct {
		Location struct {
			Lat float64 `json:"lat"`
			Lng float64 `json:"lng"`
		}
		FormattedAddress string `json:"formatted_address"`
		Business         string `json:"business"`
		AddressComponent struct {
			Country      string `json:"country"`
			Province     string `json:"province"`
			City         string `json:"city"`
			District     string `json:"district"` //区县名
			Town         string `json:"town"`
			Street       string `json:"street"`        //街道名（行政区划中的街道层级）
			StreetNumber string `json:"street_number"` //街道门牌号
		}
	}
}

// 逆地址解析
func GetReverseGeoCoding(param ReverseGeoCodingParam) (result *ReverseGeoCodingResult, err error) {
	url := "http://api.map.baidu.com/reverse_geocoding/v3/?ak=%s&output=json&coordtype=%s&location=%f,%f"
	if param.CoordType == "" {
		param.CoordType = "wgs84ll"
	}
	url = fmt.Sprintf(url, param.Ak, param.CoordType, param.Lat, param.Lng)
	result = &ReverseGeoCodingResult{}
	var data []byte
	data, err = httplib.Get(url).Bytes()
	if err != nil {
		return
	}
	logs.Info("GetReverseGeoCoding param:%+v,result:%s", param, string(data))
	err = json.Unmarshal(data, result)
	return
}
